//package com.infoauto.opc.gateway.service.impl;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//
//import com.infoauto.opc.gateway.model.ProcessLog;
//import com.infoauto.opc.gateway.service.AndonGatewayService;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//import java.util.Map;
//

//@Service
//public class AndonGatewayServiceImpl implements AndonGatewayService {
//
//    private WebInterface wi;
//
//    /**
//     * JSON格式数据处理
//     * 数据样例：
//     * {"属性1"："数据1","属性2":2}
//     * */
//    @Override
//    public ProcessLog doJson(String jsonData) {
//        ProcessLog p = new ProcessLog();
//        p.setErrorCode(100);
//        JSONObject json = null;
//        Map<String,Object> props = new ArrayMap<>();
//        try {
//
//            json = JSON.parseObject(jsonData);
//
//            for(Map.Entry<String,Object> k : json.entrySet()) {
//                props.put(k.getKey().toUpperCase(),k.getValue());
//            }
//        } catch (Exception e) {
//            p.setErrorCode(102);
//        }
//
//        if(p.getErrorCode() == 100 && props.size() > 0) {
//            // 校验接口属性
//            Map<Integer, WebInterfaceNode> nodes = wi.getNodes();
//            boolean flag = false;
//            for (Map.Entry<String,Object> wn : props.entrySet()) {
//                flag = false;
//                for (Map.Entry<Integer, WebInterfaceNode> entry : nodes.entrySet()) {
//                    if (wn.getKey().equals(entry.getValue().getTagName())) {
//                        flag = true;
//                        break;
//                    }
//                }
//
//                if (!flag) {
//                    p.setErrorCode(103);
//                    break;
//                }
//            }
//
//            if (p.getErrorCode() == 100) {
//                // 校验通过则保存数据，同时推送到MQ或OPC
//                for (WebInterfaceNode wn : wi.getNodes().values()) {
//                    String val = String.valueOf(props.get(wn.getTagName()));
//                    if (val != null) {
//                        wn.setTagValue(val);
//                    }
//                }
//
//                if(!WebInterfaceNodeFactory.This().publishData(wi).isSuccess()) { //改造过
//                    p.setErrorCode(108);
//                    p.setErrorText("部分数据推送失败，请联系管理员检查OPC地址或者数据类型是否匹配!失败的数据:"+WebInterfaceNodeFactory.This().publishData(wi).getMsg()); //改造新增的内容
//                }
//            }
//        } else {
//            p.setErrorCode(102);
//        }
//
//        return p;
//    }
//
//    /**
//     * XML数据处理
//     * 数据样例：
//     *  <ANDONGSERVICE>
//     *      <属性1>XXXXX</属性1>
//     *      <属性2>YYYYY</属性2>
//     *  </ANDONGSERVICE>
//     * **/
//    @Override
//    public ProcessLog doXML(String xmlData) {
//        ProcessLog p = new ProcessLog();
//        p.setErrorCode(100);
//        Document xml = null;
//
//        try {
//            xml = DocumentHelper.parseText(xmlData);
//        } catch (DocumentException e) {
//            p.setErrorCode(104);
//        }
//
//        Element root = xml.getRootElement();
//        if(p.getErrorCode() == 100 && xml!=null) {
//            List lst = root.content();
//            // 校验接口属性
//            for (WebInterfaceNode wn : wi.getNodes().values()) {
//                Element node = root.element(wn.getTagName().toUpperCase());
//
//                if (node == null) {
//                    p.setErrorCode(103);
//                    break;
//                }
//            }
//
//            if (p.getErrorCode() == 100) {
//                // 校验通过则保存数据，同时推送到MQ或OPC
//                for (WebInterfaceNode wn : wi.getNodes().values()) {
//                    Element node = root.element(wn.getTagName().toUpperCase());
//
//                    if (node != null) {
//                        wn.setTagValue(node.getText());
//                    }
//                }
//
//                if(!WebInterfaceNodeFactory.This().publishData(wi).isSuccess()) { //改造过
//                    p.setErrorCode(108);
//                    p.setErrorText("部分数据推送失败，请联系管理员!失败的数据"+WebInterfaceNodeFactory.This().publishData(wi).getMsg());//改造添加内容
//                }
//            }
//        } else {
//            p.setErrorCode(104);
//        }
//        return p;
//    }
//
//    /**
//     * 加载web接口
//     * **/
//    @Override
//    public ProcessLog loadWebInterface(String interfaceCode) {
//        ProcessLog p = new ProcessLog();
//        p.setErrorCode(100);
//        this.wi =  WebInterfaceNodeFactory.This().getWebInterfaceByCode(interfaceCode.toUpperCase());
//        if (this.wi == null) {
//            p.setErrorCode(101);
//        } else if (this.wi.getWorkDirection() != 0) {
//            // 只有接收类型的接口，才能接收数据
//            p.setErrorCode(107);
//        }
//
//        return p;
//    }
//
//
//}
